Entity ์ฐ๊ด ๊ด๊ณ
Note
๊ณ ๊ฐ์ด ์์์ ์ฃผ๋ฌธ ์, ์ฃผ๋ฌธ ์ ๋ณด๋ ์ด๋ ํ ์ด๋ธ์ ๋ค์ด๊ฐ์ผ ํ ๊น?
- ๊ณ ๊ฐ ํ ์ด๋ธ - ํ ๋ช ์ ๊ณ ๊ฐ์ ์์์ ์ฌ๋ฌ๊ฐ ์ฃผ๋ฌธํ ์ ์์ โ ์์ ์ปฌ๋ผ ์ค๋ณต
- ์์ ํ ์ด๋ธ - ํ๋์ ์์์ ์ฌ๋ฌ๋ช ์ ๊ณ ๊ฐ์๊ฒ ์ฃผ๋ฌธ๋ ์ ์์ โ ๊ณ ๊ฐ ์ปฌ๋ผ ์ค๋ณต
โ ์ฃผ๋ฌธ ํ ์ด๋ธ ์์ฑ์ผ๋ก ํด๊ฒฐ
๊ณ ๊ฐ : ์์ = N : M ๊ด๊ณ
- N:M ๊ด๊ณ ํ ์ด๋ธ์ ์ฐ๊ด ๊ด๊ณ ํด๊ฒฐ์ ์ํด ์ฃผ๋ฌธ ํ ์ด๋ธ๊ณผ ๊ฐ์ ์ค๊ฐ ํ ์ด๋ธ์ ๋๊ณ ๊ด๋ฆฌํ๋ค
- DB ํ ์ด๋ธ์์๋ ํ ์ด๋ธ ์ฌ์ด์ ์ฐ๊ด ๊ด๊ณ๋ฅผ FK๋ก ๋งบ์ ์ ์๊ณ ๋ฐฉํฅ ์๊ด์์ด ์กฐํ ๊ฐ๋ฅํ๋ค
๊ทธ๋ฌ๋ Entity๋ ๊ฐ์ฒด ํํ์ด๋ฏ๋ก ์๋ Entity์ ํ์ ์ ํ๋๋ก ๊ฐ์ง๊ณ ์์ด์ผ ์กฐํ ํ ์ ์๋ค โ ๋ฐฉํฅ ๊ฐ๋ ์กด์ฌ
1๋ 1 ๊ด๊ณ @OneToOne
๋จ๋ฐฉํฅ ๊ด๊ณ
์ธ๋ํค์ ์ฃผ์ธ ์ค์
- ์ธ๋ํค์ ์ฃผ์ธ๋ง์ด ์ธ๋ ํค๋ฅผ ๋ฑ๋ก, ์์ , ์ญ์ ํ ์ ์์ผ๋ฉฐ, ์ฃผ์ธ์ด ์๋ ์ชฝ์ ์ธ๋ํค ์กฐํ๋ง ๊ฐ๋ฅ
- ์์ Entity๊ฐ ์ธ๋ ํค์ ์ฃผ์ธ์ธ ๊ฒฝ์ฐ
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@OneToOne
@JoinColumn(name = "user_id") // ์ธ๋ํค์ ์ฃผ์ธ์ด ํ์ฉํ๋ ์ ๋ํ
์ด์
private User user;
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
์๋ฐฉํฅ ๊ด๊ณ
- ์๋ฐฉํฅ์ผ ๊ฒฝ์ฐ ์ธ๋ํค์ ์ฃผ์ธ์ด ๋๊ตฌ์ธ์ง ์๋ ค์ฃผ์ด์ผ ํจ
- ์ธ๋ํค์ ์ฃผ์ธ์ด ์๋ ์ชฝ์์ mappedBy ์ต์ ์ฌ์ฉํด ์ธ๋ํค์ ์ฃผ์ธ ์ง์
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(mappedBy = "user")
private Food food;
}
mappedBy์ ์์ฑ๊ฐ์ ์ธ๋ํค์ ์ฃผ์ธ์ธ ์๋ Entity์ ํ๋๋ช ์ ์๋ฏธํ๋ค
@OneToOne
@JoinColumn(name = "user_id")
private User user; -> ์ด ๋ถ๋ถ..
Warning
์ธ๋ ํค์ ์ฃผ์ธ์ธ Entity์์ @JoinColumn์ ์ฌ์ฉํ์ง ์์๋ default ์ต์ ์ด ์ ์ฉ๋์ด ์๋ต ๊ฐ๋ฅ
- ๋ค๋ง, 1:N ๊ด๊ณ์์ ์๋ตํ๋ค๋ฉด ์ธ๋ ํค๋ฅผ ์ ์ฅํ ์ปฌ๋ผ์ ํ์ ํ ์๊ฐ ์์ด ์ค๊ฐ ํ ์ด๋ธ์ด ์๊ธฐ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ ์ ๋ํ ์ด์ ์ฐ๋๊ฒ ์ข์
์๋ฐฉํฅ ๊ด๊ณ์์ mappedBy ์ต์ ์ ์๋ตํ ๊ฒฝ์ฐ์๋ ํ์ ๋ถ๊ฐ๋ฅ, ๋ฐ๋์ ์ค์ ํ์ ~
N ๋ 1 ๊ด๊ณ @ManyToOne
๋จ๋ฐฉํฅ ๊ด๊ณ
- ์์ Entity๊ฐ N์ ๊ด๊ณ๋ก ์ธ๋ ํค์ ์ฃผ์ธ
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
์๋ฐฉํฅ ๊ด๊ณ
- ๊ณ ๊ฐ Entit์์ Java ์ปฌ๋ ์ ์ ์ฌ์ฉํ์ฌ ์์ Entity ์ฐธ์กฐ
- ๊ทธ๋ ๋ค๊ณ DB์ user_id 1,2 ์ด๋ ๊ฒ ์ ์ฅ๋๋๊ฑด ์๋
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "user") // ์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก @JoinColumn์ผ๋ก ์ธ๋ํค๋ฅผ ๊ฐ์ง๋ ํ๋ ์ด๋ฆ
private List<Food> foodList = new ArrayList<>();
}
1 ๋ N ๊ด๊ณ @OneToMany
๋จ๋ฐฉํฅ ๊ด๊ณ
- ์ธ๋ํค์ ์ฃผ์ธ์ ์์์ด์ง๋ง ์ค์ ์ธ๋ํค๋ ๊ณ ๊ฐ entity๊ฐ ๊ฐ์ง๊ณ ์์
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@OneToMany
@JoinColumn(name = "food_id") // users ํ
์ด๋ธ์ food_id ์ปฌ๋ผ
private List<User> userList = new ArrayList<>();
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
- ์ธ๋ํค์ ์ฃผ์ธ์ ์์ entity์ง๋ง ์ค์ DB์์ ์ธ๋ํค๋ ๊ณ ๊ฐ ํ ์ด๋ธ์ด ๊ฐ๊ณ ์์ โ INSERT์ UPDATE๊ฐ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์๋๋ ๋ฌธ์ ๊ฐ ์๊น
์๋ฐฉํฅ ๊ด๊ณ
1๋ N ๊ด๊ณ์์๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ฐฉํฅ ๊ด๊ณ๊ฐ ์์
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "food_id", insertable = false, updatable = false)
private Food food;
}
- insertable, updatable์ false๋ก ์ค์ ํ๋ฉด ์๋ฐฉํฅ์ฒ๋ผ ์ค์ ํ ์๋ ์์
N ๋ M ๊ด๊ณ @ManyToMany
๋จ๋ฐฉํฅ ๊ด๊ณ
- N : M ๊ด๊ณ๋ฅผ ํ์ด๋ด๊ธฐ ์ํด ์ค๊ฐ ํ ์ด๋ธ ์์ฑํ์ฌ ์ฌ์ฉ
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@ManyToMany
@JoinTable(name = "orders", // ์ค๊ฐ ํ
์ด๋ธ ์์ฑ
joinColumns = @JoinColumn(name = "food_id"), // ํ์ฌ ์์น์ธ Food Entity ์์ ์ค๊ฐ ํ
์ด๋ธ๋ก ์กฐ์ธํ ์ปฌ๋ผ ์ค์
inverseJoinColumns = @JoinColumn(name = "user_id")) // ๋ฐ๋ ์์น์ธ User Entity ์์ ์ค๊ฐ ํ
์ด๋ธ๋ก ์กฐ์ธํ ์ปฌ๋ผ ์ค์
private List<User> userList = new ArrayList<>();
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
- JPA์ ์ํด ๋ง๋ค์ด์ง ํ ์ด๋ธ์ ์ปจํธ๋กค์ด ์ด๋ ค์ ์ถํ์ ํ ์ด๋ธ ๋ณ๊ฒฝ์ด ์์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์
์๋ฐฉํฅ ๊ด๊ณ
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@ManyToMany
@JoinTable(name = "orders", // ์ค๊ฐ ํ
์ด๋ธ ์์ฑ
joinColumns = @JoinColumn(name = "food_id"), // ํ์ฌ ์์น์ธ Food Entity ์์ ์ค๊ฐ ํ
์ด๋ธ๋ก ์กฐ์ธํ ์ปฌ๋ผ ์ค์
inverseJoinColumns = @JoinColumn(name = "user_id")) // ๋ฐ๋ ์์น์ธ User Entity ์์ ์ค๊ฐ ํ
์ด๋ธ๋ก ์กฐ์ธํ ์ปฌ๋ผ ์ค์
private List<User> userList = new ArrayList<>();
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "userList")
private List<Food> foodList = new ArrayList<>();
}
์ค๊ฐ ํ ์ด๋ธ
- ์ค๊ฐ ํ ์ด๋ธ์ ์ง์ ์์ฑํ์ฌ ๊ด๋ฆฌํ๋ฉด ๋ณ๊ฒฝ ๋ฐ์์ ์ปจํธ๋กค์ด ์ฌ์์ง
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@OneToMany(mappedBy = "food")
private List<Order> orderList = new ArrayList<>();
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "user")
private List<Order> orderList = new ArrayList<>();
}
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "food_id")
private Food food;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}